#pragma once

#include <QString>
#include <QList>
#include <QMap>
#include <vector>
#include "ovbase/ovgeometry.h"
#include "ovbase/ovgrdecl.h"
#include "ovbase/ovfracture.h"
#include "ovbase/ovmesh.h"
namespace OVTEST_CASE {
    class OvTestFrSmart
    {
    public:
        static int RunQ1(int argc, char* argv[]);
        static int RunQ2(int argc, char* argv[]);
        static int RunQ31(int argc, char* argv[]);
        static int RunQ32(int argc, char* argv[]);


    private:
        static void Q2ReadGrid1(QString fn, OvPoints& pts, std::vector<double>& s1);
        static void Q2ReadGrid2(QString fn, OvPoints& pts);
        static void Q2WriteGrid2(QString fn, const OvPoints& pts, const std::vector<double>& s1);
        static OvMeshPtr Q3MeshingTet(QString main_dir, OvGrdecl cpg, OvFracture3D frac, OvPropList prop_list, QString meshing_command);
        static void Pts2PtsMapping(const OvPoints& fcens, const OvPoints& ccens, int num, QVector<QMap<double, int>>& ims);
        static void GetFaults1(OvGrdecl cpg, OvPoints& nodes);
        static void GetFaults2(OvGrdecl cpg, OvPoints& nodes, OvFaces& faces);
        static void CpgSaveVtkFile(OvGrdecl cpg, QString file_name, OvPoints& fault_nodes);
    };
}

